import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
import matplotlib
import random
import time
import config
import os
#matplotlib.use('TkAgg')  # 或者 'Agg'
matplotlib.use('Agg')  # 'Agg' 适用于无 GUI 服务器

# 设置字体为 SimHei（黑体），确保中文显示正常
rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

def draw_scatter(file_path, select_feature, s=1):


    timestamp = int(time.time() * 1000)  # 当前时间戳（毫秒）
    random_number = random.randint(1000, 9999)  # 生成四位随机数
    output_filename = f"{timestamp}_{random_number}.png"  # 拼接文件名

    # 设定输出文件夹路径
    output_dir = config.OUTPUT_FOLDER_ONE_BLEW  # 选择 config.py 里的路径
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 拼接完整的输出文件路径
    output_file = os.path.join(output_dir, output_filename)


    """
    绘制下三角散点图，显示特征之间的分布关系，并返回散点数据。

    参数：
    - file_path: 输入文件路径，支持 Excel 格式。
    - select_feature: 目标列名称列表，用于选择需要分析的特征。
    - output_path: 输出图像保存路径，默认为 'scatter.png'。
    - s (int): 散点的大小，默认为 1。

    返回：
    - scatter_data: 包含所有散点图数据的字典，键为特征对，值为 (x, y) 坐标数组。
    """
    # 1. 读取数据
  #  df = pd.read_excel(file_path)
    df = pd.read_excel(file_path, engine='openpyxl')
    df = df[select_feature]  # 选择目标特征列

    # 2. 获取变量数量
    n = len(df.columns)

    # 3. 设置画布和网格布局
    fig, axes = plt.subplots(n, n, figsize=(12, 12))

    # 4. 初始化散点数据字典
    scatter_data = {}

    # 5. 遍历矩阵，绘制下三角散点图
    for i in range(n):
        for j in range(n):
            ax = axes[i, j]  # 获取当前子图
            if i >= j:  # 下三角部分绘制散点图
                x = df.iloc[:, j]
                y = df.iloc[:, i]
                ax.scatter(x, y, alpha=0.5, s=s, color="blue")  # 绘制散点图
                ax.set_xticks([])  # 隐藏x轴刻度
                ax.set_yticks([])  # 隐藏y轴刻度

                # 将散点数据存储到字典中
                scatter_data[f"{df.columns[j]} vs {df.columns[i]}"] = (x.values, y.values)
            else:  # 上三角部分留空
                ax.axis('off')

            # 6. 添加列名标签
            if i == n - 1:  # 最底部的图添加 x 轴标签
                ax.set_xlabel(df.columns[j], fontsize=8, rotation=90)
            if j == 0:  # 最左侧的图添加 y 轴标签
                ax.set_ylabel(df.columns[i], fontsize=8, rotation=0, labelpad=40)

    # 7. 调整布局
    plt.subplots_adjust(wspace=0, hspace=0)  # 消除网格间隙
   # plt.show()

    # 8. 保存图像
    fig.savefig(output_file)
    # for key, (x, y) in scatter_data.items():
    #     print(f"{key}:")
    #     print(f"x: {x}")
    #     print(f"y: {y}")
    #     print()
    return  output_file